import axios from "axios"
import store from "@/store/index"
// import router from "@/router/router"
import { message } from 'ant-design-vue'

// 创建axios实例
const service = axios.create({
  timeout: 10000
})

// 设置header请求头，发起请求前做的事情
service.interceptors.request.use(
  config => {    
    config.headers['Authorization'] = 'Bearer ' + store.state.account.token
    config.headers['X-Requested-With'] = 'XMLHttpRequest'
    return config
  },
  error => {
    Promise.reject(error)
  },
)

// respone拦截器
service.interceptors.response.use(
  (res) => {
    // 当有新的token时自动更新新的token
    if (res.headers.authorization){
      let token = res.headers.authorization.split(' ')[1]
      store.commit("account/setToken", token);
    }
    // 不提示错误信息
    if (res.request["noTipError"]) {
      return Promise.resolve(res.data);
    }
    if (res.data.status == 'success') {
      return Promise.resolve(res.data)
    } else {
      // 打印错误信息
      message.error(res.data.message)
      return Promise.reject(res.data)
    }
  }, (error) => {
    switch (error.response.status) {
      case 401:
        // 登录过期
        message.error('登录状态已过期，请重新登录！')
        store.commit('account/setLogout')
        window.location.replace('/')
        // router.push('/login')
        break;
      case 422:
        // token过期，或失效
        message.error('登录状态已失效，请重新登录！')
        store.commit('account/setLogout')
        window.location.replace('/')
        break;
      case 403:
        message.error('当前无权限，请重新登录！')
        store.commit('account/setLogout')
        window.location.replace('/')
        break;
      case 500:
        message.error('服务器繁忙，请稍后再试！')
        break;
      default:
        message.error('服务器繁忙，请稍后再试！!')
    }
    return Promise.reject(error)
  }
)

export default service
